#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32f1xx_hal.h"

void Error_Handler(void);

#define LED3_Pin GPIO_PIN_2
#define LED3_GPIO_Port GPIOE
#define LED4_Pin GPIO_PIN_3
#define LED4_GPIO_Port GPIOE
#define SPI_NSS_Pin GPIO_PIN_4
#define SPI_NSS_GPIO_Port GPIOA
#define SPI_SCK_Pin GPIO_PIN_5
#define SPI_SCK_GPIO_Port GPIOA
#define SP_MISO_Pin GPIO_PIN_6
#define SP_MISO_GPIO_Port GPIOA
#define RS485_120OHM_Pin GPIO_PIN_15
#define RS485_120OHM_GPIO_Port GPIOD
#define PHY_RESET_Pin GPIO_PIN_11
#define PHY_RESET_GPIO_Port GPIOA
#define OUT1_Pin GPIO_PIN_0
#define OUT1_GPIO_Port GPIOD
#define OUT2_Pin GPIO_PIN_1
#define OUT2_GPIO_Port GPIOD
#define OUT3_Pin GPIO_PIN_2
#define OUT3_GPIO_Port GPIOD
#define OUT4_Pin GPIO_PIN_3
#define OUT4_GPIO_Port GPIOD
#define OUT5_Pin GPIO_PIN_4
#define OUT5_GPIO_Port GPIOD
#define OUT6_Pin GPIO_PIN_5
#define OUT6_GPIO_Port GPIOD
#define OUT7_Pin GPIO_PIN_6
#define OUT7_GPIO_Port GPIOD
#define OUT8_Pin GPIO_PIN_7
#define OUT8_GPIO_Port GPIOD
#define SPI_MOSI_Pin GPIO_PIN_5
#define SPI_MOSI_GPIO_Port GPIOB
#define LED1_Pin GPIO_PIN_0
#define LED1_GPIO_Port GPIOE
#define LED2_Pin GPIO_PIN_1
#define LED2_GPIO_Port GPIOE

#define RESET_GPIO_PORT GPIOC
#define RESET_GPIO_PIN GPIO_PIN_6

#define LED1_CTRL(v) HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, v==0 ? GPIO_PIN_SET : GPIO_PIN_RESET);
#define LED2_CTRL(v) HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, v==0 ? GPIO_PIN_SET : GPIO_PIN_RESET);
#define LED3_CTRL(v) HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, v==0 ? GPIO_PIN_SET : GPIO_PIN_RESET);

#define LED1_TOGGLE_PIN  HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin)
#define LED2_TOGGLE_PIN  HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin)
#define LED3_TOGGLE_PIN  HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin)

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */
